今天我要來介紹下一個對 NiFi 很重要的 Componenet - Controller Service。只要與第三方的平台、cloud 或 DB 等都需要透過該 Componenet 來做一個對接,才可以將我們要的資料來做一個輸入或是輸出。
如同一開始所提到的,有時候我們會需要從 Database、DatawareHouse 或是雲端的服務來取得資料,進而透過我們在 NiFi 建立的 Data Pipeline 來做一連串的處理步驟,最後在寫入。但是如果同時有多個 Data Pipieline 都需要對同一個 DB 或是一個 Datasource 建立多個連線的話,則對於另一端可能會造成不可預期的影響。所以若能透過同一一個 Object 來建立其中的連線的話,對於 Pipeline 的處理一方面更加單純,另一方面對於提供資料的那一端也不會有太多不必要且重複的網路連線。
這邊我幫各位 Controller Service 底下大概的特性與分類:
AWSCredentialsProviderControllerServcie
access_key_id
, secret_access_key
來存取對應的 AWS 資源DBConnectionPool
JDBC Driver 之路徑
、class
與 Connection URL
,就可以讓 NiFi 對於 DB 來做存取。ex. MySQL, AWS Athena, AWS Redshift等當然還有很多其他原生提供的 Controller Service,ex. CassandraSessionProvider
, RedisConnectionPoolService
, HiveConnectionPool
, GCPCredentialsControllerService
等這些都是比較常用到的,而運作原理也跟我上述的描述雷同。
AvroReader
, CsvReader
, JsonTreeReader
, ParquetReader
, XMLReader
等AvroRecordSetWriter
, CSVRecordSetWriter
, JsonRecordSetWriter
, ParquetRecordSetWriter
, XMLRecordSetWriter
等如此一來 NiFi 就可以根據不同的檔案格式去解析與寫入對應的資料檔案。
接下來稍微介紹一下如何去設定 Controller Service,我們可以在主頁的左方的『齒輪符號』:
接者選擇 『CONTROLLER SERVICES』,且點選右手邊的『+』符號:
接著就會跳出所有 Controller Service的種類,與 Processors 的選擇畫面雷同,我們就可以在上面選擇我們要的 Controller Service:
接下來我分兩個場景來簡單介紹一下如何使用:
光這樣可是還不夠的,接著我們點選右手邊『齒輪』的符號,會看到如下畫面:
我們會看到一些設定,最基本的我們只要去設定好 Access Key ID
和 Secret Access Key
就可以,其中你會發現當設定完之後 Value 會變成 Sensitive Value set
:
那是因為 NiFi 本身會針對一些敏感資料的屬性去做隱藏以及加密,以避免被其他使用者知道真實 value 內容。
當設定完之後按下『APPLY』,我們就可以回到畫面按下『閃電』的符號來作為啟用:
當按下『閃電』的符號時,會看到兩種設定,一個是『Service Only』,代表只單純啟用這個 Controller Service; 另一種是『Service and referencing component』,這是除了啟用之外,也會把相關應用到的 Processor 狀態也 start 起來。
這邊我們選擇最一般的『Service Only』,就會看到 State 欄位從原本的 Disabled 變成 Enabled:
最後,我們任意挑選一個關於 AWS 的 Processor,這邊以『ListS3』為例:
我們會發現紅框也是做同樣的設定,如果每次都要設定 Access Key ID
等資訊就會相對麻煩,而且也會建立很多連線,此時我們可以在橘框選擇對應剛剛設定好的 Controller Service 即可,如此一來就能做使用了。
CSVReader
& CSVRecordSetWriter
接著可以來稍微看一下內部的設定,首先是 CSVReader
:
裡面是一些比較重要的設定,通常我是不太會動它,除非有像是分隔符號改變、schema 改變等才會去動到他。
這邊我也來提一下每一個 Value 所代表的意思:
* Schema Access Strategy: Infer Schema
代表使用檔案的欄位名稱與資料格式作為 Schema
* Value Separator: 分隔符號(default: `,`)
* Record Separator: Record 的分隔符號 (default: `\n`)
* `Treat First line as Header`: 是否要將第一行視為 Header
* Quote Character: 用雙引號來包字串
* Escape Character: 對特定符號解析的 character
而 CSVRecordSetWriter
也是類似的設定:
接著我們一樣啟用他,那 State 變成 Enabled:
最後我們拿 『SplitRecord』 來做範例,我們可以看到底下就可以設定這兩個 Controller Service,代表 FlowFiles 會以 CSV 的格式來讀取且再經由 CSV 的格式轉換寫入:
其他相關的用法其實都是大同小異,通常我也是根據我的應用場境來決定適用的 Controller Service,再搭配文件的說明來做適當的設定,只是若能擅長用 Controller Service,對於 Team 來說其實也比較好控管這個對接第三方的 Connection 設定,在後續的場境也會用到其他 Controller Service,期望讀者們能先透過這篇有一個基本的認識與操作。
明天要來講 - Templates, Lables & Funnel,很快就要第10天了,我們再一起努力一下,一定收穫良多的!